#include "foo.cuh"
#include "mymath.h"
#include<iostream>

int main(){
    // HelloFunc();
    // useCUDA();
    // std::vector<cv::Mat> src;
    // std::vector<cv::Mat> dst;
    int height = 4, width = 4;
    // cv::Mat test = cv::Mat::zeros(height,width,CV_64FC1);
    std::vector<std::vector<std::vector<float>>> dst;
    std::vector<std::vector<std::vector<float>>> test;
    std::vector<std::vector<float>> test1;
    std::vector<float> test2;
    test.clear();
    test1.clear();
    for(int i = 0 ; i < height ; i ++){
        test2.clear();
        for(int j = 0 ; j < width ; j ++){
            test2.push_back(i * width + j +1);
        }
        test1.push_back(test2);
    }
    test.push_back(test1);

    freopen("out.txt","w",stdout);

    printf("--------------input---------------\n");
    for(int i = 0 ; i < test[0].size() ; i ++){
        for(int j = 0 ; j < test[0][0].size() ; j ++){
            printf("%f ",test[0][i][j]);
        }
        printf("\n");
    }
    printf("----------------------------------\n");

    int klen = test.size(),ilen = test[0].size(),jlen = test[0][0].size();
    for(int k = 0 ; k < klen ; k ++){
        test1.clear();
        for(int i = 0 ; i < ilen ; i ++){
            test2.clear();
            for(int j = 0 ; j < jlen ; j ++){
                test2.push_back(0);
            }
            test1.push_back(test2);
        }
        test.push_back(test1);
    }
    FFT2D(height,width,1,test,dst);

    printf("--------------FFTOut---------------\n");
    for(int i = 0 ; i < dst[0].size() ; i ++){
        for(int j = 0 ; j < dst[0][0].size() ; j ++){
            printf("(%f+i%f) ",dst[0][i][j],dst[1][i][j]);
        }
        printf("\n");
    }
    printf("----------------------------------\n");

    FFT2D(height,width,-1,dst,test);


    printf("--------------IFFTOut---------------\n");
    for(int i = 0 ; i < test[0].size() ; i ++){
        for(int j = 0 ; j < test[0][0].size() ; j ++){
            printf("(%f+i%f) ",test[0][i][j],test[1][i][j]);
        }
        printf("\n");
    }
    printf("----------------------------------\n");

    fclose(stdout);

    return 0;
}